package com.example.miscontactos.Entidades;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;

public class Contacto 
{
	private String id;
 	public String displayName;
 	public ArrayList<Telefono> telefonos;
 	public ArrayList<Mail> email;
 	public ArrayList<DireccionContacto> direcciones = new ArrayList<DireccionContacto>();
 	public Organizacion organizacion;
 	public ByteArrayInputStream foto;
 	//private ArrayList<IM> imAddresses;
 	//private Boolean favorito;
 	//private ArrayList<String> notas;
 	
 	public static Contacto GetContacto(ContentResolver cr, String id)
 	{
 		Contacto contacto = new Contacto();
 		
 		Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, ContactsContract.Contacts._ID +" = ?", 
                new String[]{id}, null);
 		
 		cursor.moveToFirst();
 		 		
 		contacto.id = cursor.getString(cursor.getColumnIndex(Contacts._ID));
 		//contacto.id = id;
 		contacto.displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
 		contacto.organizacion = GetOrganizacion(id, cr);
 		//contacto.foto = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI));
 		contacto.foto = GetFotoContacto(cr, id);
 		contacto.telefonos = GetTelefonosContacto(cr, id);
 		contacto.email = GetMailsContacto(cr, id);
 		contacto.direcciones = GetDireccionesContacto(cr, id);
 		
 		return contacto;        
 	}
 	
 	private static ByteArrayInputStream GetFotoContacto(ContentResolver cr, String id)
 	{
 		Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, Long.parseLong(id));
 	     Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
 	     Cursor cursor = cr.query(photoUri,
 	          new String[] {Contacts.Photo.PHOTO}, null, null, null);
 	     if (cursor == null) {
 	         return null;
 	     }
 	     try {
 	         if (cursor.moveToFirst()) {
 	             byte[] data = cursor.getBlob(0);
 	             if (data != null) {
 	                 return new ByteArrayInputStream(data);
 	             }
 	         }
 	     } finally {
 	         cursor.close();
 	     }
 	     return null;
 	}
 	
 	private static ArrayList<DireccionContacto> GetDireccionesContacto(ContentResolver cr, String id)
 	{
 		return DireccionContacto.GetDireccionesContacto(cr, id);
 	}
 	
 	private static ArrayList<Mail> GetMailsContacto(ContentResolver cr, String id)
 	{
 		return Mail.GetMailsContacto(cr, id);
 	}
 	
 	private static ArrayList<Telefono> GetTelefonosContacto(ContentResolver cr, String id)
 	{
 		return Telefono.GetTelefonosContacto(cr, id);
 	}

	private static Organizacion GetOrganizacion(String id, ContentResolver cr)
	{
		return Organizacion.GetOrganizacionContacto(cr, id);
	}
}
